package leetcode_500;

/**
 *@author 周杨
 *ConvertANumberToHexadecimal_405 返回一个数的十六进制字符串
 *describe:每次平移4位 用15做与运算 AC 70%
 *2018年7月19日 上午10:34:16
 */
public class ConvertANumberToHexadecimal_405 {
	char[] map = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
	public static void main(String[] args) {
		System.out.println(Integer.toHexString(-1));
		ConvertANumberToHexadecimal_405 test=new ConvertANumberToHexadecimal_405();
		System.out.println(test.toHex(-1));
		System.out.println(test.toHex1(-1));
	}
	/**
	 * describe:16进制 每次平移4位
	 * 2018年7月19日 上午10:29:03
	 */
	public String toHex(int num) {
		 if (num == 0)
	            return "0";
	        String res = "";
	        //for (int i=0; i<8; i++) {
	        while (num != 0)    {
	            res = map[num & 15] + res;
	            num = (num>>>4);//每次右移四位
	        }
	        return res;
    }
	
	
	public String toHex1(int num) {
		StringBuilder sb=new StringBuilder();
		if(num==0)
			return "0";
		if(num<0) {
			num=Integer.MAX_VALUE+num+1;
			return toHex(num);
		}
		while(num>=16) {
			sb.append(map[num%16]);
			num/=16;
		}
		if(num!=0)
			sb.append(map[num]);
		return sb.reverse().toString();
		
   }
	
	
}
